使用平移操纵器可以使用户在 Kanzi 应用程序中移动节点。例如,您可以使用平移操纵器让用户移动图形。请参阅为节点启用平移手势。
使用 平移操纵器 (Pan Manipulator) 触发器响应平移手势。例如,您可以设置用户平移节点时的节点外观。请参阅使用平移操纵器 (Pan Manipulator) 触发器。
平移操纵器是一种输入操纵器,您可以用于在 Kanzi 应用程序中添加手势识别到节点上。 您可以通过 Kanzi Engine API 分配输入操纵器。请参阅使用输入操纵器。
通过完成教程学习如何使用平移操纵器。请参阅教程:平移、缩放、轻敲。
要为节点启用平移手势:



# 符号后跟别名名称访问别名目标节点。


private:
// 为 PanManipulator::StartedMessage 消息定义处理程序,该消息来自
//具有可生成平移消息的输入操纵器的 2D 节点。
//此处理程序可为平移手势准备 2D 节点。
void onPanStarted(PanManipulator::StartedMessageArguments& messageArguments)
{
//从消息参数获得用户平移的节点。
Node2DSharedPtr node2d = dynamic_pointer_cast<Node2D>(messageArguments.getSource());
if (!node2d)
{
return;
}
//当开始节点上的平移手势,让节点位于前面。
node2d->moveToFront();
}
//为 PanManipulator::MovedMessage 消息定义处理程序,该消息来自
//具有可生成平移消息的输入操纵器的 2D 节点。
//此处理程序按平移手势的量变换 2D 节点。
void onPanMoved(PanManipulator::MovedMessageArguments& messageArguments)
{
//从消息参数获得用户平移的节点。
Node2DSharedPtr node2d = dynamic_pointer_cast<Node2D>(messageArguments.getSource());
if (!node2d)
{
return;
}
//获得自平移手势序列中上一条消息以来
//平移的像素距离。
Vector2 translationDelta = messageArguments.getDelta();
//获得节点的渲染变换 (Render Transformation) 属性。
SRTValue2D nodeTransform = node2d->getRenderTransformation();
//获得节点的大小。
Vector2 nodeSize = node2d->getActualSize();
//获得节点的当前变换。
Vector2 translation = nodeTransform.getTranslation();
//从平移消息应用变换。
Vector2 translationTarget = translation - translationDelta;
//设置新变换。
nodeTransform.setTranslation(translationTarget);
//应用新变换到节点。
node2d->setRenderTransformation(nodeTransform);
}onProjectLoaded() 函数中创建 PanManipulator 操纵器并订阅其消息。
virtual void onProjectLoaded() KZ_OVERRIDE
{
ScreenSharedPtr screen = getScreen();
Domain* domain = getDomain();
//使用别名获取PanNode。
NodeSharedPtr panNode = screen->lookupNode<Node>("#PanNode");
//创建生成平移消息的输入操纵器。
PanManipulatorSharedPtr panManipulator = PanManipulator::create(domain);
//设置水平和垂直轴的阈值(以像素为单位),
//在输入操纵器识别平移手势之前,手指或鼠标需要移动轴。
panManipulator->setRecognitionThreshold(Vector2(10.0f, 10.0f));
//添加输入操纵器到PanNode。
panNode->addInputManipulator(panManipulator);
//订阅PanNode 的 PanManipulator::StartedMessage 消息。
// PanManipulator 在用户点击或触摸附加节点时生成此消息。
panNode->addMessageHandler(PanManipulator::StartedMessage, bind(&MyProject::onPanStarted, this, placeholders::_1));
//订阅 PanNode 的 PanManipulator::MovedMessage 消息。
//当用户在水平或垂直轴上移动手指或鼠标超过识别阈值时,PanManipulator
//首次生成此消息,然后
//当手指或鼠标在更新之间移动时生成此消息。
panNode->addMessageHandler(PanManipulator::MovedMessage, bind(&MyProject::onPanMoved, this, placeholders::_1));
}使用 平移操纵器 (Pan Manipulator) 触发器响应平移手势。例如,您可以设置用户平移节点时的节点外观。
平移操纵器 (Pan Manipulator) 有这些触发器:
要使用平移操纵器 (Pan Manipulator) 触发器:



有关详细信息,请参阅 API reference中的 PanManipulator 类。